// 移除泛型参数 T，因为它在特征中未被使用
pub trait Sortable {
    fn sort(&mut self);
}

pub struct Sorter;

impl Sorter {
    pub fn sort(collection: &mut impl Sortable) {
        collection.sort();
    }
}

// 实现 Sortable 特征给 Vec<T>，使用标准库的 sort 方法
impl<T: Ord> Sortable for Vec<T> {
    fn sort(&mut self) {
        // 调用标准库切片的 sort 方法进行排序
        self.as_mut_slice().sort();
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_sort_numbers() {
        let mut numbers = vec![5, 2, 9, 1, 5, 6];
        Sorter::sort(&mut numbers);
        assert_eq!(numbers, vec![1, 2, 5, 5, 6, 9]);
    }

    #[test]
    fn test_sort_strings() {
        let mut words = vec!["banana", "apple", "pear", "orange"];
        Sorter::sort(&mut words);
        assert_eq!(words, vec!["apple", "banana", "orange", "pear"]);
    }
}